/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.webhomesites.configuracao.model;

import br.com.webhomesites.configuracao.contracts.ICidadeDAO;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

/**
 *
 * @author Webhome
 */
@Entity
@Table(name="CFGCIDADE")
public class CidadeModel implements Serializable {
    
    List<CidadeModel> listaCidades = new ArrayList<>();     
    
    @Id
    @SequenceGenerator(name="CODCIDADE", sequenceName="CODCIDADE", allocationSize=1)
    @GeneratedValue(strategy= GenerationType.SEQUENCE, generator="CODCIDADE")   
    @Column(name="CODCIDADE", nullable=false)
    private int codigoCidade;
    
    @Column(name="NOMECIDADE")
    private String nomeCidade;
    
    @ManyToOne(fetch= FetchType.LAZY)
    @JoinColumn(name="CODESTADOCIDADE", insertable=true, updatable=true)
    @Fetch(FetchMode.JOIN)
    @Cascade(CascadeType.SAVE_UPDATE)
    private EstadoModel estadoModel;
    
    ICidadeDAO cidadeDAO;

    public CidadeModel() {
    }
    
    public CidadeModel (ICidadeDAO cidadeDAO) {
        this.cidadeDAO = cidadeDAO;
    }

    public int getCodigoCidade() {
        return codigoCidade;
    }

    public void setCodigoCidade(int codigoCidade) {
        this.codigoCidade = codigoCidade;
    }
    
    public String getNomeCidade() {
        return nomeCidade;
    }

    public void setNomeCidade(String nomeCidade) {
        this.nomeCidade = nomeCidade;
    }

    public List<CidadeModel> getListaCidades() {
        setListaCidades();
        return listaCidades;
    }

    private void setListaCidades() {
        this.listaCidades = cidadeDAO.selecionarCidades();
    }
    
    public int getChaveCidade(String nomeCidade) {
        
        setListaCidades();
        
        int codigoCidade = 0;
                
        for(int i = 0; i < getListaCidades().size(); i++) // Percorro o Array List com o For aprimorado.  
        {  
            if(getListaCidades().get(i).getNomeCidade().equals(nomeCidade)) // Adiciono os dados.  
            codigoCidade = getListaCidades().get(i).getCodigoCidade();
        }
        return codigoCidade;
    }
     
}
